Welcome to pandas!

8.4 更强的列方向转到行方向(分层索引)

如果DataFrame表格的列是分层索引,如果要指定列索引转换到行方向,需要用元组的方式,也可以用col_level来指定要转换的索引层级,不过要保持列索引的标签数据的唯一性。

import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.04 更强的列方向转到行方向(分层索引).xlsx" , header =[ 0,1 ])

#导入时不需指定索引

print (df)

t=df.melt(

id_vars=[( "信息","姓名" ),( "信息","籍贯" )],

value_vars=[( "2018年","上半年" )],

var_name=[ "年份","上下半年" ],

value_name = "分数"

).rename(columns={( "信息","姓名" ): "姓名" ,( "信息","籍贯" ): "籍贯" })

print (t)

返回:

信息 2018年 2019年
姓名 籍贯 上半年 下半年 上半年 下半年
0 张三 湖南 101 121 150 152
1 李四 江西 140 147 162 165
2 王麻子 湖北 106 168 118 123

姓名 籍贯 年份 上下半年 分数
0 张三 湖南 2018年 上半年 101
1 李四 江西 2018年 上半年 140
2 王麻子 湖北 2018年 上半年 106

import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.04 更强的列方向转到行方向(分层索引).xlsx", 1 , header =[ 0,1 ])

#导入时不需指定索引

print (df)

t=df.melt(

col_level=1,

id_vars=[ "姓名","籍贯" ],

value_vars=[ "18上半年","19上半年" ],

var_name =[ "年份" ],

value_name = "分数"

)

print (t)

返回:

信息 2018年 2019年
姓名 籍贯 18上半年 18下半年 19上半年 19下半年
0 张三 湖南 188 155 123 153
1 李四 江西 175 198 181 106
2 王麻子 湖北 153 118 133 135

姓名 籍贯 年份 分数
0 张三 湖南 18上半年 188
1 李四 江西 18上半年 175
2 王麻子 湖北 18上半年 153
3 张三 湖南 19上半年 123
4 李四 江西 19上半年 181
5 王麻子 湖北 19上半年 133